#include "buzzer.h"
#include "carctl.h"
#include "uart.h"
#include "interrupt.h"

u8 counter = 0, leftWheelCompare = 50, rightWheelCompare = 50;  // counter 从0到100清0
u8 recData = 0;

// 电机引脚
sbit LEFT_WHELL_0 = P1^5;  
sbit LEFT_WHELL_1 = P1^4;  
sbit RIGHT_WHELL_0 = P1^6; 
sbit RIGHT_WHELL_1 = P1^7; 

// 蓝牙指令队列
u8 commendQueue[8] = {'\0'};
u8 commendIndex = -1;

/************************************************************************************************************
* 函 数 名        : uart_routine
* 函数功能        : 串口中断函数, 手机发送信号给蓝牙, 蓝牙进一步发送给单片机, 触发此中断函数。
* 输    入        : 无
* 输    出        : 无
************************************************************************************************************/
void uart_routine() interrupt 4
{
	// 因为中断电路中, 发送 和 接收共用一个通道, 发送也会触发 4 号中断
	// 因此需要使用标志位判断是发送还是接收触发的中断
	if(RI == 1) {
		// 接收到指令, 放入缓冲, 立马准备接收下一个指令
		recData = SBUF;
		commendQueue[++commendIndex] = recData;
		RI = 0;
	}
}

/*******************************************************************************
* 函 数 名       : timer0_interrupt
* 函数功能		 : 定时器0的中断函数, 100us 进入一次, PWM周期是 100us * 100  = 10ms
* 输    入       : 无
* 输    出       : 无
*******************************************************************************/
void timer0_interrupt() interrupt 1
{
	TL0 = 0xA4;		//设置定时初值
	TH0 = 0xFF;		//设置定时初值
	counter = (counter + 1) % 100;
	
	// 左轮
	if(counter < leftWheelCompare && canGo == 1) {
		LEFT_WHELL_0 = left_wheel[0];
		LEFT_WHELL_1 = left_wheel[1];
	}	else {
		LEFT_WHELL_0 = LEFT_WHELL_1 = 1;
	}
	
	// 右轮
	if(counter < rightWheelCompare && canGo == 1) {
		RIGHT_WHELL_0 = right_wheel[0];
		RIGHT_WHELL_1 = right_wheel[1];
	} else {
		RIGHT_WHELL_0 = RIGHT_WHELL_1 = 1;
	}
}
